﻿using System;
using System.Collections.Generic;

namespace WUDI.ECharts.Title
{
	/// <summary>
	/// Object
	/// 标题组件，包含主标题和副标题。
	/// 在 ECharts 2.x 中单个 ECharts 实例最多只能拥有一个标题组件。但是在 ECharts 3 中可以存在任意多个标题组件，这在需要标题进行排版，或者单个实例中的多个图表都需要标题时会比较有用。
	/// 例如下面不同缓动函数效果的示例，每一个缓动效果图都带有一个标题组件：
	/// </summary>
	public class Title
	{

		/// <summary>
		/// string
		/// 组件 ID。默认不指定。指定则可用于在 option 或者 API 中引用组件。
		/// </summary>
		public String id { get; set; }

		/// <summary>
		/// boolean
		/// 是否显示标题组件。
		/// </summary>
		public Boolean show { get; set; } = true;

		/// <summary>
		/// string
		/// 主标题文本，支持使用 \n 换行。
		/// </summary>
		public String text { get; set; }

		/// <summary>
		/// string
		/// 主标题文本超链接。
		/// </summary>
		public String link { get; set; }

		/// <summary>
		/// string
		/// 指定窗口打开主标题超链接。
		/// 可选：
		/// 'self' 当前窗口打开
		/// 'blank' 新窗口打开
		/// </summary>
		public Target target { get; set; } = Target.blank;

		/// <summary>
		/// *
		/// </summary>
		public WUDI.ECharts.Title.TextStyle textStyle { get; set; }

		/// <summary>
		/// string
		/// 副标题文本，支持使用 \n 换行。
		/// </summary>
		public String subtext { get; set; }

		/// <summary>
		/// string
		/// 副标题文本超链接。
		/// </summary>
		public String sublink { get; set; }

		/// <summary>
		/// string
		/// 指定窗口打开副标题超链接，可选：
		/// 'self' 当前窗口打开
		/// 'blank' 新窗口打开
		/// </summary>
		public Target subtarget { get; set; } = Target.blank;

		/// <summary>
		/// *
		/// </summary>
		public WUDI.ECharts.Title.SubtextStyle subtextStyle { get; set; }

		/// <summary>
		/// string
		/// 整体（包括 text 和 subtext）的水平对齐。
		/// 可选值：'auto'、'left'、'right'、'center'。
		/// </summary>
		public TextAlign textAlign { get; set; } = TextAlign.auto;

		/// <summary>
		/// string
		/// 整体（包括 text 和 subtext）的垂直对齐。
		/// 可选值：'auto'、'top'、'bottom'、'middle'。
		/// </summary>
		public TextVerticalAlign textVerticalAlign { get; set; } = TextVerticalAlign.auto;

		/// <summary>
		/// boolean
		/// 是否触发事件。
		/// </summary>
		public Boolean triggerEvent { get; set; } = false;

		/// <summary>
		/// number
		/// 标题内边距，单位px，默认各方向内边距为5，接受数组分别设定上右下左边距。
		/// 使用示例：
		/// // 设置内边距为 5
		/// padding: 5
		/// // 设置上下的内边距为 5，左右的内边距为 10
		/// padding: [5, 10]
		/// // 分别设置四个方向的内边距
		/// padding: [
		///     5,  // 上
		///     10, // 右
		///     5,  // 下
		///     10, // 左
		/// ]
		/// </summary>
		public int padding { get; set; } = 5;

		/// <summary>
		/// number
		/// 主副标题之间的间距。
		/// </summary>
		public int itemGap { get; set; } = 10;

		/// <summary>
		/// number
		/// 所有图形的 zlevel 值。
		/// zlevel用于 Canvas 分层，不同zlevel值的图形会放置在不同的 Canvas 中，Canvas 分层是一种常见的优化手段。我们可以把一些图形变化频繁（例如有动画）的组件设置成一个单独的zlevel。需要注意的是过多的 Canvas 会引起内存开销的增大，在手机端上需要谨慎使用以防崩溃。
		/// zlevel 大的 Canvas 会放在 zlevel 小的 Canvas 的上面。
		/// </summary>
		public int zlevel { get; set; } = 0;

		/// <summary>
		/// number
		/// 组件的所有图形的z值。控制图形的前后顺序。z值小的图形会被z值大的图形覆盖。
		/// z相比zlevel优先级更低，而且不会创建新的 Canvas。
		/// </summary>
		public int z { get; set; } = 2;

		/// <summary>
		/// string,number
		/// grid 组件离容器左侧的距离。
		/// left 的值可以是像 20 这样的具体像素值，可以是像 '20%' 这样相对于容器高宽的百分比，也可以是 'left', 'center', 'right'。
		/// 如果 left 的值为'left', 'center', 'right'，组件会根据相应的位置自动对齐。
		/// </summary>
		public dynamic left { get; set; } = "auto";

		/// <summary>
		/// string,number
		/// grid 组件离容器上侧的距离。
		/// top 的值可以是像 20 这样的具体像素值，可以是像 '20%' 这样相对于容器高宽的百分比，也可以是 'top', 'middle', 'bottom'。
		/// 如果 top 的值为'top', 'middle', 'bottom'，组件会根据相应的位置自动对齐。
		/// </summary>
		public dynamic top { get; set; } = "auto";

		/// <summary>
		/// string,number
		/// grid 组件离容器右侧的距离。
		/// right 的值可以是像 20 这样的具体像素值，可以是像 '20%' 这样相对于容器高宽的百分比。
		/// 默认自适应。
		/// </summary>
		public dynamic right { get; set; } = "auto";

		/// <summary>
		/// string,number
		/// grid 组件离容器下侧的距离。
		/// bottom 的值可以是像 20 这样的具体像素值，可以是像 '20%' 这样相对于容器高宽的百分比。
		/// 默认自适应。
		/// </summary>
		public dynamic bottom { get; set; } = "auto";

		/// <summary>
		/// Color
		/// 标题背景色，默认透明。
		/// 颜色可以使用 RGB 表示，比如 'rgb(128, 128, 128)'   ，如果想要加上 alpha 通道，可以使用 RGBA，比如 'rgba(128, 128, 128, 0.5)'，也可以使用十六进制格式，比如 '#ccc'
		/// </summary>
		public String backgroundColor { get; set; } = "transparent";

		/// <summary>
		/// Color
		/// 标题的边框颜色。支持的颜色格式同 backgroundColor。
		/// </summary>
		public String borderColor { get; set; } = "#ccc";

		/// <summary>
		/// number
		/// 标题的边框线宽。
		/// </summary>
		public int borderWidth { get; set; } = 0;

		/// <summary>
		/// number,Array
		/// 圆角半径，单位px，支持传入数组分别指定 4 个圆角半径。
		/// 如:
		/// borderRadius: 5, // 统一设置四个角的圆角大小
		/// borderRadius: [5, 5, 0, 0] //（顺时针左上，右上，右下，左下）
		/// </summary>
		public dynamic borderRadius { get; set; } = 0;

		/// <summary>
		/// number
		/// 图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
		/// 示例：
		/// {
		///     shadowColor: 'rgba(0, 0, 0, 0.5)',
		///     shadowBlur: 10
		/// }
		/// 注意：此配置项生效的前提是，设置了 show: true 以及值不为 tranparent 的背景色 backgroundColor。
		/// </summary>
		public int? shadowBlur { get; set; }

		/// <summary>
		/// Color
		/// 阴影颜色。支持的格式同color。
		/// 注意：此配置项生效的前提是，设置了 show: true。
		/// </summary>
		public String shadowColor { get; set; }

		/// <summary>
		/// number
		/// 阴影水平方向上的偏移距离。
		/// 注意：此配置项生效的前提是，设置了 show: true。
		/// </summary>
		public int shadowOffsetX { get; set; } = 0;

		/// <summary>
		/// number
		/// 阴影垂直方向上的偏移距离。
		/// 注意：此配置项生效的前提是，设置了 show: true。
		/// </summary>
		public int shadowOffsetY { get; set; } = 0;

	}
}
